#!/usr/bin/env ruby

require 'shellwords'
require File.expand_path('../../spec/support/detect_rails_version', __FILE__)

unless ARGV[0]
  puts <<-EOF
Usage: ./script/#{__FILE__} COMMAND [ARGS]

The command will be run in the context of the local rails
app stored in test-rails-app.

Examples:

./script/local server
./script/local c
./script/local rake db:migrate
  EOF
  exit(1)
end

# Set up some variables
rails_version = detect_rails_version!

dir = ".test-rails-apps"
path = "#{dir}/test-rails-app-#{rails_version}"

# Ensure .test-rails-apps is created
system "mkdir #{dir}" unless File.exists?(dir)

# Create the sample rails app if it doesn't already exist
unless File.exists? path
  args = %w[
    -m\ spec/support/rails_template_with_data.rb
    --skip-gemfile
    --skip-bundle
    --skip-git
    --skip-turbolinks
    --skip-test-unit
  ]
  system "RAILS='#{rails_version}' bundle exec rails new #{Shellwords.escape path} #{args.join ' '}"
end

# Link this rails app
system "rm test-rails-app"
system "ln -s #{Shellwords.escape path} test-rails-app"

# If it's a rails command, auto add the rails script
RAILS_COMMANDS = %w{generate console server dbconsole g c s runner}
args = RAILS_COMMANDS.include?(ARGV[0]) ? ["rails", ARGV].flatten : ARGV

# Run the command
exec "cd test-rails-app && GEMFILE=../Gemfile bundle exec #{args.join(" ")}"
